// 2014-02-01 Tyrghen
//---------------------------------------------
// Usage:
//  ["C_man_polo_1_F", "marker_object", "marker_destination","jip_var_dest","jip_var_alive"] call edt_fnc_lead;
//  [obj_polo, "marker_object", "marker_destination","jip_var_dest","jip_var_alive"] call edt_fnc_lead;
//---------------------------------------------
// Purpose:
// 
// 
// Parameters:
// - Task Title: Can be text or a magic string (starting with STR_). It HAS to be unique
// - Task Status: has to be one of the valid Status for a task: created, failed, canceled, succeeded, assigned
// Optional Parameters:
// - Task Description: The text which is shown inside the Task List when you click on the Task. (Can be a magic string as well)
// - Task Marker: The name of the marker used to create a task marker. The marker can have a Text which will be used as a Tooltip. The text can be a magic string.
// - Success Var: The name of a JIP synchronised variable (those you can read/set with EDT_fnc_getVar and EDT_fnc_setVar) indicating the success of the task
// - Failed Var: The name of a JIP synchronised variable (those you can read/set with EDT_fnc_getVar and EDT_fnc_setVar) indicating the failure of the task
//
// Returns:
// True
//---------------------------------------------
// Objectif:
// Crée une tâche dans la liste des tâches visibles quand on ouvre la carte. Cette fonction n'affiche PAS de 
//
// Paramètres:
// - Titre de la tâche: Peut être du texte ou un chaîne magique (commençant par STR_). DOIT être unique.
// - Statut de la tâche: doit être un statut valide pour une tâche: created, failed, canceled, succeeded, assigned
// Paramètres Optionnels:
// - Description de la tâche: Le texte qui apparaît dans la liste lorsqu'on sélectionne une tâche. (Peut aussi être une chaîne magique)
// - Marqueur de tâche: Le nom du marqueur sur carte qui indique l'endroit où se trouve la tâche. Le texte du marqueur sera utilisé comme "conseil" lorsqu'on survole le marqueur.
// - Variable de succès: Le nom de la variable synchronisée en JIP (celles que vous pouvez lire ou écrire avec EDT_fnc_getVar et EDT_fnc_setVar) qui indique que la tâche est acoomplie.
// - Variable d'échec: Le nom de la variable synchronisée en JIP (celles que vous pouvez lire ou écrire avec EDT_fnc_getVar et EDT_fnc_setVar) qui indique que la tâche est échouée.
//
// Renvoie:
// True
//---------------------------------------------

//#define __FORCE_TRACE__
//#define __FORCE_DEBUG__
//#define __FORCE_INFO__
#define THIS_FILE "editor\fn_lead.sqf"
#include <tmf_constants.h>
#include <tmf_macros.h>

if (!isServer) exitWith {TRACE("Not Server")};

TRACE_1("Start",_this);
TMFPROFILERSTART;

private ["_type","_marker","_dest_marker","_error","_dest_var","_dest_msg","_dead_msg","_tmf_params","_obj_params","_alive_var"];
DEFAULT_PARAM(_type,0,"");
DEFAULT_PARAM(_marker,1,"");
DEFAULT_PARAM(_dest_marker,2,"");
DEFAULT_PARAM(_dest_var,3,"");
DEFAULT_PARAM(_alive_var,4,"");
DEFAULT_PARAM(_dest_msg,5,ARR_1("STR_TMF_TARGET_LEAD"));
DEFAULT_PARAM(_dead_msg,6,ARR_1("STR_TMF_TARGET_DIED"));

_obj = objNull;
_is_valid = true;

if (AND_ALSO(IS_STRING(_type),(_type == ""))) then {
	_is_valid = false;
};
if (AND_ALSO(IS_STRING(_type),!(_type isKindOf "Man"))) then {
	_is_valid = false;
};
if (AND_ALSO(IS_STRING(_type),IS_STRING(_marker))) then {
	_is_valid = _is_valid && _marker != "";
};
if (AND_ALSO(IS_STRING(_type),IS_ARRAY(_marker))) then {
	_is_valid = _is_valid && count _marker < 2;
};
if (AND_ALSO(IS_OBJECT(_type),(isnull _type))) then {
	_is_valid = false;
};
_dest_var = _dest_var call FFUNC(getStringVar);
_alive_var = _alive_var call FFUNC(getStringVar);

if (_is_valid) then {
	_obj_params = [];
	_obj_params set [TMF_VEH_PARAMS_TYPE, _type];
	_obj_params set [TMF_VEH_PARAMS_GRP, Civilian];
	_obj_params set [TMF_VEH_PARAMS_POS, _marker];

	_tmf_params = [];
	_tmf_params = [_tmf_params,"DEST_MSG",_dest_msg] call FFUNC(hashSet);
	_tmf_params = [_tmf_params,"DIE_MSG",_dead_msg] call FFUNC(hashSet);
	_tmf_params = [_tmf_params,"SHARED_DEST_VAR",_dest_var] call FFUNC(hashSet);
	_tmf_params = [_tmf_params,"SHARED_ALIVE_VAR",_alive_var] call FFUNC(hashSet);
	_tmf_params = [_tmf_params,"DESTINATION",[_dest_marker]] call FFUNC(hashSet);
	// _tmf_params = [_tmf_params,"DEST_CODE",""] call FFUNC(hashSet);
	// _tmf_params = [_tmf_params,"DIE_CODE",""] call FFUNC(hashSet);

	_obj = [_obj_params,"LEAD",_tmf_params] call FFUNC(CreateMissionUnit);
	TRACE_1("End",ARR_3(_obj, typeof _obj, getPos _obj));
} else {
	ERROR("Invalid Parameters");
};
TMFPROFILERSTOP;
_obj